package fr.uniscol.service.impl;

import java.util.List;

import org.apache.log4j.Logger;
import org.codehaus.jackson.map.deser.ValueInstantiators.Base;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import fr.uniscol.dao.IEtablissementDao;
import fr.uniscol.dao.IUtilisateurDao;
import fr.uniscol.model.BaseAnneeScolaire;
import fr.uniscol.model.DefaultUser;
import fr.uniscol.model.EtablissementModel;
import fr.uniscol.model.IUniscolUser;
import fr.uniscol.service.IUtilisateurService;

@Service("usersService")
public class UtilisateurServiceImpl implements IUtilisateurService {

	private static Logger log = Logger.getLogger(UtilisateurServiceImpl.class);
	
	@Autowired
	private IUtilisateurDao utilisateursDao;
	
	@Autowired
	private IEtablissementDao etablissementDao;
	
	public IUtilisateurDao getUtilisateursDao() {
		return utilisateursDao;
	}

	public void setUtilisateursDao(IUtilisateurDao utilisateursDao) {
		this.utilisateursDao = utilisateursDao;
	}

	public IEtablissementDao getEtablissementDao() {
		return etablissementDao;
	}

	public void setEtablissementDao(IEtablissementDao etablissementDao) {
		this.etablissementDao = etablissementDao;
	}

	@Override
	public List<DefaultUser> getAllUtilisateurOfEtablissement(BaseAnneeScolaire base) {
		
		if(base.getEtablissement() == null){
			throw new NullPointerException("Pas d'établissement !");
		}
		
		List<DefaultUser> users = utilisateursDao.getAllUtilisateurOfEtablissement(base);
		
		for(DefaultUser u : users){
			u.setBaseSelectionnee(base);
		}
		
		return users;
	}

	@Override
	public IUniscolUser getUtilisateurById(long userId) {
		
		IUniscolUser user = utilisateursDao.getUtilisateurById(userId);
		
		if(user != null && user.getBaseSelectionnee() != null){
			user.getBaseSelectionnee().setEtablissement(etablissementDao.getEtablissementById(user.getEtablissement().getId()));
		}
		
		return user;
	}

	@Override
	public boolean saveUser(DefaultUser utilisateur) {
		return utilisateursDao.saveUser(utilisateur);
	}

	@Override
	public boolean deleteUser(IUniscolUser user) {
		return utilisateursDao.deleteUser(user);
	}

    @Override
    public List<DefaultUser> getAllUtilisateurs() {
        return utilisateursDao.getAllUtilisateurs();
    }
}
